RDS拡張モニタリングの値をDatadogで利用する
こんにちは、虎塚です。
今回は、DatadogでRDSを監視するために拡張RDSインテグレーションを有効にする手順を紹介します。
DatadogでのRDS監視
RDSのパフォーマンスデータをDatadogで利用するには、次の3つの方法があります。
- 標準RDSインテグレーション
- 拡張RDSインテグレーション
- RDS+ネイティブDBインテグレーション
1つ目の標準RDSインテグレーションは、CloudWatchのRDSメトリックス値をDatadogで使います。このインテグレーションは、AWSインテグレーションを実行してRDSを選択することで有効にできます。
AWSインテグレーションの設定手順は、次の記事を参照ください。
2つ目の拡張RDSインテグレーションは、RDSの拡張モニタリングで取得できる値をDatadogで使います。このインテグレーションでは、RDSの拡張モニタリングでCloudWatch Logsにputされる値を、AWS LambdaでDatadogに送信することで有効にできます。
今回は、拡張RDSインテグレーションの設定手順を詳しく紹介します。Datadogの公式ドキュメントやAWSブログでの紹介記事は、次のページをご覧ください。
なお、3つ目のRDS+ネイティブDBインテグレーションについては、また別の機会に触れたいと思います。
設定手順
この手順では、主にAWS CLIを使用します。次のバージョンで動作確認しました。
- aws-cli/1.10.64 Python/2.7.10 Darwin/14.5.0 botocore/1.4.54
1. RDS拡張モニタリングの有効化
監視対象のDBインスタンスで、RDS拡張モニタリングを有効にします。その際、Granularityを15秒に設定します。
手順は、次の記事を参考にしてください。
- AWS Management Consoleで作業する(デフォルトの設定を適用する)場合
- AWS CLIで作業する、またはデフォルト以外の設定を適用する、もしくはその両方の場合
設定後、CloudWatch LogsのManagement Consoleを開き、ロググループRDSOSMetricsにDBインスタンスのリソースIDと同じログストリームが表示されていることを確認しておきましょう。
2. KMSでカスタマーマスターキーを作成
AWS KMSでカスタマーマスターキーを作成します。
まず、キーのポリシーファイルを作成します。
{ "Version": "2012-10-17", "Id": "key-consolepolicy-2", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:root"}, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::123456789012:role/my-iam-role" ]}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::123456789012:role/my-iam-role" ]}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::123456789012:role/my-iam-role" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": "true"}} } ] }
キーポリシーで、キーの管理者と利用者を指定しています。キーの利用者として、この手順を実行するユーザのIAMロール (my-iam-role) を含めました。IAMユーザで実行している場合は、user/your-iam-userを指定します。
コマンドを実行して、ポリシー付きのキーを作成します。
aws kms create-key \ --policy file://lambda-datadog-key-policy.json \ --description 'for datadog'
実行結果の例を次に示します。
{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "12345678-abcd-1234-abcd-1234567890ab", "Description": "for datadog", "Enabled": true, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1477388416.36, "Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/12345678-abcd-1234-abcd-1234567890ab", "AWSAccountId": "123456789012" } }
最後に、作成したキーのKeyIdを指定して、エイリアス (lambda-datadog-key) を設定します。
aws kms create-alias \ --alias-name alias/lambda-datadog-key \ --target-key-id 12345678-abcd-1234-abcd-1234567890ab
3. APIキーとアプリケーションキーの暗号化
ステップ2で作成したキーを使用して、DatadogのAPIキーとAPPキーを暗号化します。
aws kms encrypt --key-id alias/lambda-datadog-key \ --plaintext '{"api_key":"<datadog_api_key>", "app_key":"<datadog_app_key>"}'
DatadogのAPIキーとAPPキーは、Datadogの左メニューから、[Integrations]→[APIs]を開くと表示されます。各キーがまだ存在しない場合は、新規に作成します。
実行結果の例を次に示します。
{ "KeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/12345678-abcd-1234-abcd-1234567890ab", "CiphertextBlob": "AQECAHgT...VDpGS7I=" }
ステップ5でCiphertextBlobの値を使うので、控えておきます。
4. Lambda用のIAMロールの作成
ステップ5で作成するAWS Lambdaのために、AWSサービスロール (lambda-datadog-post-execution) を作成します。
まず、IAMロールの信頼ポリシーファイルを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
次に、コマンドを実行して、上の信頼ポリシーを付与したIAMロールを作成します。
aws iam create-role \ --role-name lambda-datadog-post-execution\ --assume-role-policy-document file://lambda-service-role-policy.json
実行結果の例を示します。
{ "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" } } ] }, "RoleId": "ABCDEFGABCDEFGABCDEFG", "CreateDate": "2016-10-25T10:38:14.135Z", "RoleName": "lambda-datadog-post-execution", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/lambda-datadog-post-execution" } }
最後に、作成したIAMロールに権限ポリシーを付与します。
ポリシーファイルを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "<ENCRYPTION_KEY ARN>" ] } ] }
コマンドを実行して、IAMロールにインラインポリシーとして上のポリシーつけます。
aws iam put-role-policy \ --role-name lambda-datadog-post-execution \ --policy-name lambda-datadog-policy \ --policy-document file://lambda-datadog-policy.json
5. Lambdaファンクションの作成
Lambdaファンクションを作成します。AWS LambdaのManagement Consoleで、[Create a Lambda function]ボタンをクリックします。
Select blueprint画面で、datadog-process-rds-metricsのブループリントを選択します。
Configure triggers画面で、次のように入力します。
- Log Group: RDSOSMetrics
- Filter Name: 任意 (myLambdaTrigger)
- Enable trigger: オン
[Next]ボタンをクリックします。Configure function画面で、次のように入力します。
- Name: 任意 (lambda-datadog-post-function)
- Runtime: Python 2.7
コードエリア内の
- Handler: lambda_function.lambda_handler
- Role: Choose an existing role
- Existing role: ステップ4で作成したIAMロール (lambda-datadog-post-execution)
- VPC: NoVPC
[Next]ボタンをクリックします。Review画面で設定を確認し、[Create function]ボタンをクリックします。
以上で完了です。
Datadogのダッシュボードで確認
拡張RDSインテグレーションを有効にすると、Datadogで値がどのように見えるかを確認しましょう。
Datadogの左メニューから、[Dashboards]→[Dashboard List]を開き、Integration Dashboard一覧から「AWS RDS (Enhanced Metrics)」 を選択します。
初期状態のダッシュボードは、次のような画面です。
ダッシュボードでは、好きなメトリックスを選択して、好きな場所にグラフを表示できます。
おわりに
RDSの拡張モニタリングで取得できる詳細なデータは、そのままだとCloudWatch Logsに溜まっていくだけです。今回のようにDatadogを使って可視化することで、活用の場面を広げることができそうですね。
それでは、また。